#include<iostream>
#include<string>
#include<algorithm>
#include <unordered_set>
using namespace std;
///////////方法一：排序后检查相邻元素
//bool isUnique(string astr) {
//    int len = astr.size();
//    int flag = 0;
//    if (len < 2)
//    {
//        return 1;
//    }
//    sort(astr.begin(), astr.end());
//    for (int i = 0; i < len - 1; i++)
//    {
//        if (astr[i] == astr[i + 1])
//        {
//            flag = 1;
//            break;
//        }
//        else
//            ;
//    }
//    return !flag;
//}

//////////////方法二：哈希表
bool isUnique(string s) 
{
        unordered_set<char> seen;
        for (char c : s) {
            if (seen.count(c)) {
                return false;
            }
            seen.insert(c);
        }
        return true;
}

//////////////方法三：布尔数组
//bool isUnique(string s) {
//    // 假设字符集是ASCII（128个字符）
//    if (s.length() > 128) return false;
//
//    bool charSet[128] = { false };
//    for (char c : s) {
//        int index = c;
//        if (charSet[index]) {
//            return false;
//        }
//        charSet[index] = true;
//    }
//    return true;
//}
int main() {
    
    cout << isUnique("leetcode") << endl;  // 输出: 0 (false)
    cout << isUnique("abc") << endl;       // 输出: 1 (true)
    cout << isUnique("") << endl;          // 输出: 1 (true)
    cout << isUnique("a") << endl;         // 输出: 1 (true)
    cout << isUnique("aa") << endl;        // 输出: 0 (false)

    return 0;
}